package com.hsu.hsurpc.registry;

import com.hsu.hsurpc.config.RegistryConfig;
import com.hsu.hsurpc.model.ServiceMetaInfo;

import java.util.List;

/**
 * 注册中心接口，定义了注册中心的基本操作
 * @Author Hsu琛君珩
 * @Date 2024-09-20 16:53
 * @Description
 * @Version: v1.0.0
 */
public interface Registry {

    /**
     * 初始化注册中心客户端
     *
     * @param registryConfig 注册中心的配置信息
     */
    void init(RegistryConfig registryConfig);

    /**
     * 注册服务到注册中心（服务端调用）
     *
     * @param serviceMetaInfo 服务的元数据信息
     * @throws Exception 如果注册失败，抛出异常
     */
    void register(ServiceMetaInfo serviceMetaInfo) throws Exception;

    /**
     * 注销服务（服务端调用）
     *
     * @param serviceMetaInfo 服务的元数据信息
     */
    void unRegister(ServiceMetaInfo serviceMetaInfo);

    /**
     * 服务发现（获取某服务的所有节点，客户端调用）
     *
     * @param serviceKey 服务的唯一键名（服务名称+版本）
     * @return 返回该服务的所有节点信息列表
     */
    List<ServiceMetaInfo> serviceDiscovery(String serviceKey);

    /**
     * 销毁注册中心客户端，释放资源
     */
    void destroy();

    /**
     * 心跳检测（服务端）
     */
    void heartBeat();

    /**
     * 监听服务节点（消费端）
     * @param serviceNodeKey 服务节点的唯一键名
     */
    void watch(String serviceNodeKey);
}
